package com.bozhao.stash;

import java.util.Arrays;
import java.util.List;

/**
 * @author ZhaoBo (zhaobo@shanshu.ai)
 * @date 2022/3/31
 */

public class GitStashTraining {

    /**
     * 在这个分支有改动，但是突然发现不应在这个分支上改动，想切回到master分支，但是，这时候有改动，是不能切换到master分支的，
     * <p>
     * 注意：这里不能切换分支，一般是在我们修改了一个已经有的文件的时候，这时候该文件已经被git管理了，修改了文件是不能切换分支的，但是如果我们是新建了一个文件，该文件不在暂存区，只是在工作区，这时候
     * 我们仍然是可以切换分支的，只有当使用git add 命令将新创将的文件添加到暂存区后，才无法切换分支
     * <p>
     * 所以就修改了一个已经存在的文件，发现不应该在这个分支上修改，想要切回到想要修改的分支（如没注意在qa分支修改了，发现后，想要切回dev）这时候是无法切换的，这个时候，git stash命令就派上用场了
     * <p>
     * 想要从qa切回到dev分支，步骤：
     * 1）使用git stash命令 -- 储藏所有未提交的修改
     * 2）切换想要在分支修改的分支git checkout 分支名
     * 3）
     *    查看当前stash中的内容:
     *    git stash list
     *    弹出当前stash中的内容，并应用到当前分支对应的工作目录上: git stash pop stash-id  / 将stash中的内容应用到当前目录，不同于git stash pop，该命令不会将内容从stash list中删除:git stash apply stash-id
     * 4）
     *    从stash list中移除某个指定的stash: git stash drop stash-id
     *    清空stash: git stash clear
     *
     * 5）切换到想要的修改的分支后，正常进行开发
     */
    public void testStash() {

        // 现在在master修改文件试试
        List<String> strings = Arrays.asList("呵呵", "哈哈", "嘿嘿");
        strings.forEach(System.out::println);
    }
    /**
     * 使用注意事项总结：
     * 1) 我们stash保存现场，切换到目标分支后，弹出stash前，最好不要在目标分支做任何修改，先弹出stash到目标分支目录，在进行正常开发，如果切换到目标分支，在pop之前做了修改，pop时是需要merge，这时
     * 会提示你，目标分支有改动，先提交改动内容的提示，
     *
     * 2) 如果有多个stash，使用git stash pop后，默认弹出最近一个stash到目标分支，并删除对应stash，这时候想要弹出其它的stash必须先提交，已经弹出的stash，原因和1）一样，因为目标分支已经有改动了
     */
    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

    public void newMethodAgain() {

    }

}
